package com.reguang.config;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * 
 * <p>Title: Swagger2</p>
 * <p>Description: API文档工具类</p>
 * @author weibiao
 * @date 2019年12月26日
 */
@Configuration
public class Swagger2 {

	/**
	 * 
	 * <p>Title: createRestApi</p>
	 * <p>Description: swagger2的配置文件，这里可以配置swagger2的一些基本的内容，比如扫描的包等等</p>
	 * @return
	 */
	@Bean
	public Docket createRestApi() {

		// 为swagger添加header参数可供输入
		ParameterBuilder userTokenHeader = new ParameterBuilder();
		ParameterBuilder userIdHeader = new ParameterBuilder();
		List<Parameter> pars = new ArrayList<Parameter>();
		userTokenHeader.name("headerUserToken").description("userToken").modelRef(new ModelRef("string"))
				.parameterType("header").required(false).build();
		userIdHeader.name("headerUserId").description("userId").modelRef(new ModelRef("string")).parameterType("header")
				.required(false).build();
		pars.add(userTokenHeader.build());
		pars.add(userIdHeader.build());

		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
				.apis(RequestHandlerSelectors.basePackage("com.reguang.controller")).paths(PathSelectors.any()).build()
				.globalOperationParameters(pars);
	}

	/**
	 * 
	 * <p>Title: apiInfo</p>
	 * <p>Description: 构建 api文档的信息</p>
	 * @return
	 */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				// 设置页面标题
				.title("热光科技-`new project`API接口文档")
				// 设置联系人
				.contact(new Contact("热光科技-developer", "http://www.reguang.com", "weibiao0105@yusys.com.cn"))
				// 描述
				.description("欢迎访问`new project`接口文档，这里是描述信息")
				// 定义版本号
				.version("1.0").build();
	}

}
